/*
    接口:interface
    本质:是一种引用数据类型
    网上说法：接口是一种特殊抽象类 -> 因为本地文件中仍然是以.java文件存储，编译后仍然是.class文件 -> 但接口不是类！！没有构造方法 -> 不能new对象 -> 但是可以new实现类
 */
public interface InterfaceDemo {
    //1.7以前接口只能包含静态常量和抽象方法
    //接口的实现关键词为implements  实现类名结尾以Impl结尾，如InterfaceDemoImpl

    //静态常量：全大写，如果有多个单词拼接使用_连接
    //接口中只能有静态常量，所以默认添加final static修饰词，可以省略不写
    public final static int VALUE_A = 1;
    int VALUE_B = 2;
    //抽象方法
    //默认添加abstract修饰词，可以不写
    public abstract void getA();
    abstract void get();
    void abstractMethod();

    //JDK1.8版本

    //默认方法 访问修饰词默认为public 不能用其他访问修饰符
    //该方法允许不被实现，实现类不实现该方法时，默认调用接口类中的默认方法
    public default void defaultMethod(){
        //privateMethod();
        System.out.println("接口中的默认方法");
    }

    //静态方法 访问修饰词默认为public 不能用其他访问修饰符
    //该方法不能被重写 用(接口名.方法名)调用,实现类不能调用接口中的静态方法
    public static void staticMethod(){
        //privateStaticMethod();
        System.out.println("接口中的静态方法");
    }

    //JDK1.9版本
    //私有方法 供1.8版本中新增的静态方法和默认方法使用 -> 可以提取相同的代码块，实现代码复用

    //普通私有 供默认方法使用
    private void privateMethod(){
        System.out.println("默认方法中可以复用的代码块");
    }

    //静态私有 供静态方法使用
    private static void privateStaticMethod(){
        System.out.println("静态方法中可以复用的代码块");
    }

    //类与接口知识点测试用方法
    void methodA();
    void methodB();
    default void methodC(){}
}
